package com.zqsoft.frame;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.zqsoft.bean.UserBean;
import com.zqsoft.bean.UserData;
import com.zqsoft.dao.UserDAO;
import com.zqsoft.dao.UserDataDAO;
import com.zqsoft.guiHelper.net.bean.UserItem;
import com.zqsoft.guiHelper.net.bean.UserWindow;
import com.zqsoft.ncfarm.core.MessageDialogHelper;

/**
 * 用户界面
 * @author
 */
public class UserWin implements UserWindow {

    private List<UserBean> allUser = null;	// 所有用户信息

    /**
     * 构造函数
     */
    public UserWin() {
        allUser = UserDAO.getAllUsers();
    }


    // 修改密码
    public boolean changePassword(String oldPassword, String newPassword, String checkPassword) {
        // TODO Auto-generated method stub
        // 判断输入密码是否用户密码相等
        if(!GameMember.loginUser.getPassword().equals(oldPassword)) {
            MessageDialogHelper.showMessageDialog("密码错误", "提示信息");
            return false;
        }

        // 判断新密码长度是否在 6-12 位之间
        if (newPassword == null || newPassword.length() < 6 || newPassword.length() > 12) {
            MessageDialogHelper.showMessageDialog("密码长度必须在 6-12 位之间", "提示信息");
            return false;
        }

        // 判断新密码和确认密码是否相等
        if (!newPassword.equals(checkPassword)) {
            MessageDialogHelper.showMessageDialog("确认密码必须和密码相同", "提示信息");
            return false;
        }

        GameMember.loginUser.setPassword(newPassword);      // 更新用户密码
        UserDAO.saveAllUsers(allUser);                      // 保存所有用户信息
        MessageDialogHelper.showMessageDialog("密码修改成功", "提示信息");

        return true;
    }

    @Override
    // 获取所有头像文件路径集合
    public List<String> getUserFaceList() {
        // TODO Auto-generated method stub
        String headDirPath = "resources/head";

        File headDir = new File(headDirPath);          // 获取头像所在目录
        String[] fileNames = headDir.list();           // 获取目录下所有文件名
        List<String> headPaths = new ArrayList<>();    // 定义集合存储头像路径

        // 检查文件名数组是否为空
        if (fileNames != null) {
            // 遍历所有文件名
            for (String fileName : fileNames) {
                String filePath = headDirPath + "/" + fileName;          // 构建完整路径
                headPaths.add(filePath);                                 // 将路径添加到集合中
            }
        }
        return headPaths;                   // 返回存储头像路径的集合
    }

    @Override
    /**
     * 用户登陆
     */
    public boolean loginCheckUser(String userName, String password) {
        // TODO Auto-generated method stub
        // 1、判断用户名长度是否在3-10位之间
        if (userName == null || userName.length() < 3 || userName.length() > 10) {
            MessageDialogHelper.showMessageDialog("用户名长度必须在3-10位之间", "提示信息");
            return false;
        }
        // 2、判断密码长度是否在6-12位之间
        if (password == null || password.length() < 6 || password.length() > 12) {
            MessageDialogHelper.showMessageDialog("密码长度必须在6-12位之间", "提示信息");
            return false;
        }
        // 3、判断用户信息的用户名和密码是否和输入的用户名和密码相同
        // 循环遍历成员变量allUsers
        for (int i = 0; i < this.allUser.size(); i++) {
            UserBean bean = allUser.get(i);
            if (bean.getUserName().equals(userName) && bean.getPassword().equals(password)) {
                // 保存当前登录的用户状态
                GameMember.loginUser = bean;
                // 获取用户数据
                UserData userData = UserDataDAO.getUserData(bean.getUserId());
                // 保存当前登录用户游戏数据信息
                GameMember.userData = userData;
                return true;
            }
        }
        return false;
    }

    @Override
    // 实现用户信息修改功能
    public boolean changeUserInfo(String userModText, String nickName, String headPic, String notice) {
        // TODO Auto-generated method stub
        GameMember.loginUser.setNickName(nickName);            // 昵称
        GameMember.loginUser.setUserModText(userModText);      // 个性签名
        GameMember.loginUser.setNotice(notice);                // 公告
        GameMember.loginUser.setPic(headPic);                  // 头像

        UserDAO.saveAllUsers(allUser);                         // 保存所有用户信息
        MessageDialogHelper.showMessageDialog("个人信息修改成功", "提示信息");

        return true;
    }


    @Override
    /**
     * 用户注册
     */
    public boolean registerUser(String userName, String password, String checkPassword) {
        // TODO Auto-generated method stub
        String pwd = new String(password);
        String checkpwd = new String(checkPassword);
        if (userName == null || userName.length() < 3 || userName.length() > 10) {
            MessageDialogHelper.showMessageDialog("用户名长度必须在3-10位之间", "提示信息");
            return false;
        }
        if (password == null || password.length() < 6 || password.length() > 12) {
            MessageDialogHelper.showMessageDialog("密码长度必须在6-12位之间", "提示信息");
            return false;
        }
        if (!password.equals(checkpwd)) {
            MessageDialogHelper.showMessageDialog("两次输入密码不相同", "提示信息");
            return false;
        }
        // 循环遍历成员变量allUsers
        for (int i = 0; i < allUser.size(); i++) {
            UserBean bean = allUser.get(i);
            if (bean.getUserName().equals(userName)) {
                MessageDialogHelper.showMessageDialog("用户名已经存在", "提示信息");
                return false;
            }
        }
        // 构建UserBean实体对象
        UserBean user = new UserBean();
        // 产生一个唯一的的编号
        int userId = new Random().nextInt(100000);
        user.setUserId(userId);
        user.setUserName(userName);
        user.setNickName(userName);
        user.setPassword(password);
        user.setPic("resources/head/1-1.GIF");
        user.setUserModText("这个家伙很懒");
        user.setNotice("欢迎来偷菜");
        // 封装的用户对象加入到原来的用户列表中
        allUser.add(user);
        // 保存所有的用户信息
        UserDAO.saveAllUsers(allUser);
        // 保存用户数据信息
        UserData userData = new UserData();
        userData.setUserId(userId);
        userData.setMoney(200);
        userData.setExp(0);
        UserDataDAO.updateUserData(userData);
        MessageDialogHelper.showMessageDialog("注册成功", "提示信息");
        return true;
    }

    @Override
    //实现好友列表展示
    public List<UserItem> getUserList() {
        // TODO Auto-generated method stub
        List<UserItem> users = new ArrayList<UserItem>();  //用于存放所有的游戏用户信息

        for (int i = 0; i < this.allUser.size(); i++) {    //存入所有用户信息
            UserItem item = allUser.get(i);
            users.add(item);
        }

        users.remove(GameMember.loginUser);       //删除当前登陆用户
        users.add(0,GameMember.loginUser);        //将当前登陆用户加入到第一个位置

        return users;
    }

}
